home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / mui / mui-tools / deft ii / sources / defaulttools.em < prev    next >
Text File  |  1995-03-09  |  10KB  |  340 lines

  1. OPT MODULE
  2.  
  3.  
  4. /*/////////////////////////////////////////////////////////////////////////////
  5. ///////////////////////////////////////////////////////////// Macro files /////
  6. ///////////////////////////////////////////////////////////////////////////////
  7. MACROS 'MUI.pma'
  8. */
  9.  
  10.  
  11. ->*****
  12. ->** External modules
  13. ->*****
  14. MODULE 'muimaster' , 'libraries/mui'
  15. MODULE 'libraries/asl'
  16. MODULE 'icon'
  17. MODULE 'tools/boopsi'
  18. MODULE 'utility/tagitem'
  19. MODULE 'workbench/workbench' , 'workbench/startup'
  20.  
  21. MODULE '*Defs'
  22. MODULE '*GUI_MUIB'
  23. MODULE '*Work'
  24.  
  25.  
  26. ->*****
  27. ->** Error handling
  28. ->*****
  29. RAISE    "MEM"    IF    ParsePatternNoCase()    =    -1    ,
  30.         "MEM"    IF    Mui_AllocAslRequest()    =    NIL
  31.  
  32.  
  33. ->*****
  34. ->** Global variables
  35. ->*****
  36. EXPORT DEF deftII                    :    PTR TO obj_app
  37. EXPORT DEF modified                    :    LONG
  38. EXPORT DEF current_edited_def_tool    :    LONG
  39.  
  40. DEF new_def_tool_fr : PTR TO filerequester
  41.  
  42.  
  43. /****************************************************
  44. ** Initializes the new default tool file requester **
  45. ****************************************************/
  46. EXPORT PROC init_def_tools() IS
  47.     new_def_tool_fr := Mui_AllocAslRequest( ASL_FILEREQUEST , [    ASLFR_REJECTICONS , TRUE , TAG_DONE ] )
  48.  
  49.  
  50. /*****************************************************************/
  51. /* Adds a default tool if it isn't already there in the listview */
  52. /*****************************************************************/
  53. EXPORT PROC add_default_tool( old_def_tool : PTR TO CHAR , new_def_tool : PTR TO CHAR )
  54.  
  55.     DEF def_tool : PTR TO default_tool
  56.     DEF def_tool_tmp : PTR TO default_tool
  57.     DEF i = 0 , already_there = FALSE
  58.     DEF pattern_length
  59.     DEF return = 0
  60.  
  61.     set( deftII.lv_default_tools , MUIA_List_Quiet , MUI_TRUE )
  62.  
  63.     REPEAT
  64.  
  65.         domethod( deftII.lv_default_tools , [ MUIM_List_GetEntry , i++ , {def_tool_tmp} ] )
  66.         IF def_tool_tmp <> NIL THEN already_there := str_cmp_no_case( old_def_tool , def_tool_tmp.old )
  67.  
  68.     UNTIL ( def_tool_tmp = NIL ) OR already_there
  69.  
  70.     IF ( already_there = FALSE ) AND ( StrLen( old_def_tool ) > 0 )
  71.  
  72.         def_tool := NewR( SIZEOF default_tool )
  73.  
  74.         def_tool.old := String( StrLen( old_def_tool ) )
  75.         StrCopy( def_tool.old , old_def_tool , ALL )
  76.  
  77.         def_tool.old_raw := String ( StrLen( old_def_tool ) + 2 )
  78.         StringF( def_tool.old_raw , '\ei\s' , old_def_tool )
  79.  
  80.         def_tool.pattern := FastNew( pattern_length := StrLen( def_tool.old ) * 2 + 2 )
  81.         IF ParsePatternNoCase( def_tool.old , def_tool.pattern , pattern_length ) = 0 THEN def_tool.pattern := NIL
  82.  
  83.         def_tool.new := String( StrLen( new_def_tool ) )
  84.         StrCopy( def_tool.new , new_def_tool , ALL )
  85.  
  86.         domethod( deftII.lv_default_tools , [ MUIM_List_InsertSingle , def_tool , MUIV_List_Insert_Sorted ] )
  87.         modified := TRUE
  88.  
  89.     ELSE
  90.  
  91.         return := 10
  92.         DisplayBeep( NIL )
  93.  
  94.     ENDIF
  95.  
  96.     current_edited_def_tool := NO_CURRENT_EDITED_DEF_TOOL
  97.     domethod( deftII.app , [ MUIM_MultiSet , MUIA_String_Contents , '' ,
  98.             deftII.stR_old_def_tool , deftII.stR_PO_new_def_tool , NIL ] )
  99.  
  100.     set( deftII.lv_default_tools , MUIA_List_Quiet , FALSE )
  101.  
  102. ENDPROC
  103.  
  104.  
  105. /*******************************************************************/
  106. /* Prepares the edition of the active default tool in the listview */
  107. /*******************************************************************/
  108. EXPORT PROC edit_default_tool()
  109.  
  110.     DEF def_tool : PTR TO default_tool
  111.  
  112.     get( deftII.lv_default_tools , MUIA_List_Active , {current_edited_def_tool} )
  113.     domethod( deftII.lv_default_tools , [ MUIM_List_GetEntry , MUIV_List_GetEntry_Active , {def_tool} ] )
  114.     set( deftII.stR_old_def_tool , MUIA_String_Contents , def_tool.old )
  115.     set( deftII.stR_PO_new_def_tool , MUIA_String_Contents , def_tool.new )
  116.     set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_old_def_tool )
  117.  
  118. ENDPROC
  119.  
  120.  
  121. /***************************************************/
  122. /* Deletes the active default tool in the listview */
  123. /***************************************************/
  124. EXPORT PROC delete_default_tool()
  125.  
  126.     set( deftII.lv_default_tools , MUIA_List_Quiet , MUI_TRUE )
  127.  
  128.     domethod( deftII.lv_default_tools , [ MUIM_List_Remove , MUIV_List_Remove_Active ] )
  129.     current_edited_def_tool := NO_CURRENT_EDITED_DEF_TOOL
  130.     domethod( deftII.app , [ MUIM_MultiSet , MUIA_String_Contents , '' ,
  131.             deftII.stR_old_def_tool , deftII.stR_PO_new_def_tool , NIL ] )
  132.  
  133.     set( deftII.lv_default_tools , MUIA_List_Quiet , FALSE )
  134.  
  135.     set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.lv_default_tools )
  136.  
  137. ENDPROC
  138.  
  139.  
  140. /**************************************************************/
  141. /* Hook function called to add a default tool to the listview */
  142. /**************************************************************/
  143. EXPORT PROC app_add_default_tool( hook , obj , msg : PTR TO LONG )
  144.  
  145.     DEF app_def_tools : PTR TO appmessage
  146.     DEF one_def_tool : PTR TO wbarg
  147.     DEF icon : PTR TO diskobject
  148.     DEF old_dir , i
  149.  
  150.     app_def_tools := msg[]
  151.     one_def_tool := app_def_tools.arglist
  152.  
  153.     FOR i := 1 TO app_def_tools.numargs
  154.  
  155.         old_dir := CurrentDir( one_def_tool.lock )
  156.         icon := GetDiskObject( one_def_tool.name )
  157.  
  158.         IF ( icon = NIL ) OR ( icon.type <> WBPROJECT )
  159.  
  160.             DisplayBeep( NIL )
  161.  
  162.         ELSE
  163.  
  164.             add_default_tool( icon.defaulttool , '' )
  165.             FreeDiskObject( icon )
  166.  
  167.         ENDIF
  168.  
  169.         CurrentDir( old_dir )
  170.         one_def_tool++
  171.  
  172.     ENDFOR
  173.  
  174.     set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.lv_default_tools )
  175.  
  176. ENDPROC
  177.  
  178.  
  179. /***********************************************************/
  180. /* Hook function to display a default tool in the listview */
  181. /***********************************************************/
  182. EXPORT PROC display_def_tool( hook , string_array : PTR TO LONG , def_tool : PTR TO default_tool )
  183.  
  184.     string_array[ 0 ] := ( IF EstrLen( def_tool.new ) = 0 THEN def_tool.old_raw ELSE def_tool.old )
  185.     string_array[ 1 ] := def_tool.new
  186.  
  187. ENDPROC
  188.  
  189.  
  190. /***********************************************************************/
  191. /* Hook function to compare default tools to sort them in the listview */
  192. /***********************************************************************/
  193. EXPORT PROC compare_def_tool( hook , def_tool1 : PTR TO default_tool , def_tool2 : PTR TO default_tool )
  194.  
  195.     DEF name1 : PTR TO CHAR
  196.     DEF name2 : PTR TO CHAR
  197.  
  198.     name1 := IF EstrLen( def_tool1.new ) > 0 THEN def_tool1.old ELSE def_tool1.old_raw
  199.     name2 := IF EstrLen( def_tool2.new ) > 0 THEN def_tool2.old ELSE def_tool2.old_raw
  200.  
  201. ENDPROC OstrCmp( name1 , name2 )
  202.  
  203.  
  204. /***********************************************************/
  205. /* Hook function called before opening the pop object list */
  206. /***********************************************************/
  207. EXPORT PROC open_new_def_tools_list()
  208.  
  209.     DEF new_def_tool : PTR TO CHAR
  210.     DEF new_def_tool_tmp : PTR TO CHAR
  211.     DEF def_tool : PTR TO default_tool
  212.     DEF i = 0 , j , found = FALSE , already_there
  213.  
  214.     set( deftII.lv_new_def_tools , MUIA_List_Quiet , MUI_TRUE )
  215.  
  216.     domethod( deftII.lv_new_def_tools , [ MUIM_List_Clear ] )
  217.  
  218.     REPEAT
  219.  
  220.         domethod( deftII.lv_default_tools , [ MUIM_List_GetEntry , i++ , {def_tool} ] )
  221.  
  222.         IF def_tool <> NIL
  223.  
  224.             IF EstrLen( def_tool.new ) > 0
  225.  
  226.                 already_there := FALSE
  227.                 j := 0
  228.  
  229.                 REPEAT
  230.  
  231.                     domethod( deftII.lv_new_def_tools , [ MUIM_List_GetEntry , j++ , {new_def_tool_tmp} ] )
  232.                     already_there := str_cmp_no_case( def_tool.new , new_def_tool_tmp )
  233.  
  234.                 UNTIL ( new_def_tool_tmp = NIL ) OR already_there
  235.  
  236.                 IF already_there = FALSE THEN domethod( deftII.lv_new_def_tools , [ MUIM_List_InsertSingle , def_tool.new , MUIV_List_Insert_Sorted ] )
  237.  
  238.             ENDIF
  239.  
  240.         ENDIF
  241.  
  242.     UNTIL def_tool = NIL
  243.  
  244.     get( deftII.stR_PO_new_def_tool , MUIA_String_Contents , {new_def_tool} )
  245.  
  246.     i := 0
  247.  
  248.     REPEAT
  249.  
  250.         domethod( deftII.lv_new_def_tools , [ MUIM_List_GetEntry , i++ , {new_def_tool_tmp} ] )
  251.         IF new_def_tool_tmp <> NIL THEN found := str_cmp_no_case( new_def_tool , new_def_tool_tmp )
  252.  
  253.     UNTIL ( new_def_tool_tmp = NIL ) OR found
  254.  
  255.     IF found
  256.  
  257.         set( deftII.lv_new_def_tools , MUIA_List_Active , i - 1 )
  258.  
  259.     ELSE
  260.  
  261.         set( deftII.lv_new_def_tools , MUIA_List_Active , MUIV_List_Active_Top )
  262.  
  263.     ENDIF
  264.  
  265.     set( deftII.lv_new_def_tools , MUIA_List_Quiet , FALSE )
  266.  
  267. ENDPROC MUI_TRUE
  268.   
  269.  
  270. /***********************************************************/
  271. /* Hook function called before closing the pop object list */
  272. /***********************************************************/
  273. EXPORT PROC close_new_def_tools_list()
  274.  
  275.     DEF new_def_tool : PTR TO CHAR
  276.  
  277.     domethod( deftII.lv_new_def_tools , [ MUIM_List_GetEntry , MUIV_List_GetEntry_Active , {new_def_tool} ] )
  278.     set( deftII.stR_PO_new_def_tool , MUIA_String_Contents , new_def_tool )
  279.     set( deftII.wi_main , MUIA_Window_Activate , MUI_TRUE )
  280.     set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_PO_new_def_tool )
  281.  
  282. ENDPROC
  283.  
  284.  
  285. /****************************************************************************************************
  286. ** Hook function called to update the new default tool string gadget according to a file requester **
  287. ****************************************************************************************************/
  288. EXPORT PROC add_new_def_tool()
  289.  
  290.     DEF new_def_tool_name[ 256 ] : ARRAY OF CHAR
  291.  
  292.     set( deftII.app , MUIA_Application_Sleep , MUI_TRUE )
  293.  
  294.     IF Mui_AslRequest( new_def_tool_fr , [ TAG_DONE ] )
  295.  
  296.         set( deftII.app , MUIA_Application_Sleep , FALSE )
  297.  
  298.         AstrCopy( new_def_tool_name , new_def_tool_fr.drawer , 256 )
  299.         AddPart( new_def_tool_name , new_def_tool_fr.file , 256 )
  300.         set( deftII.stR_PO_new_def_tool , MUIA_String_Contents , new_def_tool_name )
  301.         set( deftII.wi_main , MUIA_Window_Activate , MUI_TRUE )
  302.         set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_PO_new_def_tool )
  303.  
  304.     ELSE
  305.  
  306.         set( deftII.app , MUIA_Application_Sleep , FALSE )
  307.  
  308.     ENDIF
  309.  
  310. ENDPROC
  311.  
  312.  
  313. /*********************************************************************************************
  314. ** Hook function called to update the new default tool string gadget according to a appicon **
  315. *********************************************************************************************/
  316. EXPORT PROC app_add_new_def_tool( hook , obj , msg : PTR TO LONG )
  317.  
  318.     DEF app_new_def_tool : PTR TO appmessage
  319.     DEF new_def_tool : PTR TO wbarg
  320.     DEF new_def_tool_name[ 256 ] : ARRAY OF CHAR
  321.  
  322.     app_new_def_tool := msg[]
  323.     new_def_tool := app_new_def_tool.arglist
  324.  
  325.     IF app_new_def_tool.numargs <> 1
  326.  
  327.         DisplayBeep( NIL )
  328.  
  329.     ELSE
  330.  
  331.         NameFromLock( new_def_tool.lock , new_def_tool_name , 256 )
  332.         AddPart( new_def_tool_name , new_def_tool.name , 256 )
  333.         set( deftII.stR_PO_new_def_tool , MUIA_String_Contents , new_def_tool_name )
  334.         set( deftII.wi_main , MUIA_Window_Activate , MUI_TRUE )
  335.         set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_PO_new_def_tool )
  336.  
  337.     ENDIF
  338.  
  339. ENDPROC
  340.